<?php

namespace app\common\validate\system;

use yiqiniu\extend\validate\YqnValidate;

//版本控制
class SystemVersionValid extends YqnValidate
{
    /**
     *  验证规则
     */
    protected $rule = [
        'id' => 'require|number',
        'is_effect' => 'require|in:0,1',
        'app_name' => 'require|in:merchants,manage',
        'scene' => 'require',
        'version' => 'require|validVersion:version',
        'version_major' => 'require',
        'version_revision' => 'require',
        'upgrade_url' => 'require',
        'install_url' => 'require',
        'is_force' => 'require|in:0,1',
        'is_transit' => 'require|in:0,1',
    ];

    /**
     * 定义错误信息
     * 格式：'字段名.规则名'    =>    '错误信息'
     *
     * @var array
     */
    protected $message = [
        'id.require' => '版本未找到',
        'id.number' => '版本未找到',
        'is_effect.require' => '请选择状态',
        'is_effect.in' => '是否生效状态类型错误',
        'app_name.require' => '应用名称不能为空',
        'app_name.in' => '应用名称未找到',
        'scene.require' => '应用场景不能为空',
        'version.require' => '应用版本不能为空',
        'version.validVersion' => '应用版本错误必须存在2个 . 每个项字符长度不能超过5个字符',
        'version_major.require' => '主版本号不能为空',
        'version_revision.require' => '修订版本号不能为空',
        'upgrade_url.require' => '升级包路径不能为空',
        'install_url.require' => '安装包路径不能为空',
        'is_force.require' => '是否强制升级不能为空',
        'is_force.in' => '是否强制升级(0:否,1:是)',
        'is_transit.require' => '是否过渡版本不能为空',
        'is_transit.in' => '是否过渡版本(0:否,1:是)',
    ];


    //验证场景
    protected $scene = [
        'version_edit_effect' => ['id', 'is_effect'],
        'version_info' => [],
        'version_save' => [
            'scene', 'version','description'
//            'version_major', 'version_minor', 'version_revision',
//            'upgrade_url', 'install_url'
        ],
        'salesman_version_info' => ['id'],
    ];

    /**
     * 验证版本号是否符合要求
     * @param mixed $value
     * @param mixed $rule
     * @param array $data
     * @param string $field 验证字段名
     * @return bool
     * 规格格式:   dbExists:表名,字段   例:  dbExists:admin_role,id
     */
    public function validVersion($value, $rule, $data = [], string $field = ''): bool
    {
        $value = explode('.', $value);
        if (count($value) < 2) {
            return false;
        }

        foreach ($value as $v) {
            if (!is_numeric($v) || strlen($v) > 5) {
                return false;
            }
        }

        return true;
    }
}